home *** CD-ROM | disk | FTP | other *** search
/ Libris Britannia 4 / science library(b).zip / science library(b) / DJGPP / DJLSR111.ZIP / libsrc / c / io / setvbuf.c < prev    next >
C/C++ Source or Header  |  1993-06-28  |  1KB  |  51 lines

  1. /* This is file SETVBUF.C */
  2. /*
  3. ** Copyright (C) 1993 DJ Delorie, 24 Kirsten Ave, Rochester NH 03867-2954
  4. **
  5. ** This file is distributed under the terms listed in the document
  6. ** "copying.dj", available from DJ Delorie at the address above.
  7. ** A copy of "copying.dj" should accompany this file; if not, a copy
  8. ** should be available from where this file was obtained.  This file
  9. ** may not be distributed without a verbatim copy of "copying.dj".
  10. **
  11. ** This file is distributed WITHOUT ANY WARRANTY; without even the implied
  12. ** warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  13. */
  14.  
  15. #include <stdio.h>
  16.  
  17. int setvbuf(FILE *f, char *buf, int type, int len)
  18. {
  19.   int mine=0;
  20.   if (!f)
  21.     return -1;
  22.   fflush(f);
  23.   switch (type)
  24.   {
  25.     case _IOFBF:
  26.     case _IOLBF:
  27.       if (len <= 0)
  28.         return -1;
  29.       if (buf == 0)
  30.       {
  31.         buf = (char *)malloc(len);
  32.         if (buf == 0)
  33.           return -1;
  34.         mine = 1;
  35.       }
  36.       setbuffer(f, NULL, 0);
  37.       f->_flag &= ~_IONBF;
  38.       f->_flag |= type;
  39.       if (mine)
  40.         f->_flag |= _IOMYBUF;
  41.       f->_ptr = f->_base = buf;
  42.       f->_bufsiz = len;
  43.       return 0;
  44.     case _IONBF:
  45.       setbuffer(f, NULL, 0);
  46.       return 0;
  47.     default:
  48.       return -1;
  49.   }
  50. }
  51.